//
// Created by Administrator on 2020/7/2.
//委托构造函数:
//回顾:Clock类的两个构造函数:
/*
Clock(int newH,int newM,int newS):hour(newH),minute(newM),second(newS){}//构造函数
Clock::Clock():hour(0),minute(0),second(0){}//默认构造函数
//委托构造函数:委托构造函数使用类的其他构造函数执行初始化过程
//例如:
Clock(int newH,int newM,int newS):hour(newH),minute(newM),second(newS){}
Clock():Clock(0,0,0){}
*/


//复制构造函数:用已经存在的对象去初始化一个新对象
//复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。作用是用一个已存在的对象去初始化同类型的新对象。
/*
class 类名
{
    public:
        类名(形参);//构造函数
        类名(const 类名 &对象名);//复制构造函数
        //...
};
类名::类(const 类名 &对象名)//复制构造函数的实现
{
    函数体
}
*/

//注意:以上“&对象名“前面有const是为了防止数据双向传递!

//复制构造函数例子
#include <iostream>
using namespace std;

class Point
{
public:
    //Losing
private://私有数据
    int x,y;
};

//成员函数的实现
Point::Point(const Point &p)
{
    x=p.x;
    y=p.y;
    cout<<"Calling the copy constructor"<<endl;
}

//形参为Point类对象的函数
void fun1(Point p)
{
    cout<<p.getX()<<endl;
}
//返回值为Point类对象的函数
Point fun2()
{
    Point a;
    return a;
}
//主程序
int main()
{
    Point a;//第一个对象A
    Point b(a);//情况1:用A初始化B。第一次调用拷贝构造函数
    cout<<b.getX()<<endl;
    fun1(b);//情况2:对象B作为fun1的实参。第二次调用拷贝构造函数
    b=fun2();//情况3:函数的返回值是类对象,函数返回时,调用拷贝构造函数
    cout<<b.getX()<<endl;
    return 0;
}